package dletc.demo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * 出现异常执行顺序，那些代码会执行，那么不会执行。
 * 
 *注意：只要异常没有捕捉，采用上抛方式，此方法的后续代码不会执行，捕捉异常后，后续代码可以执行
 *	      另外需要注意，try语句块中的某一行出现异常，该行后面代码不会执行，进入catch模块
 *	  			finally模块不论是否发生异常都会被执行，且在抛出异常之前。
 */

public class demo05 {

	public static void main(String[] args){
		System.out.println("mainStart");
		try {
			m1();  //catch可以捕捉 2个异常，也可以多个catch。
			System.out.println("Hello!");
		} catch (ClassCastException | FileNotFoundException e) {
			System.out.println("出现异常！");
			e.printStackTrace();
		}
		//出现异常时，该语句会执行，因为执行到 catch语句时，已经捕捉了异常，可以实行。
		System.out.println("mainend");

	}
	
	/**
	 * 抛出别的异常不行，抛ClassCastException 不行，异常不匹配
	 * 但是可以抛出父类的异常 IoException 抛出老祖宗 Exception也行  结论 可以抛父类和包含该异常的类。
	 * 可以抛出多个异常，用“，”隔开
	 */
	private static void m1() throws ClassCastException,FileNotFoundException {
		System.out.println("m1Start");
		m2();
		System.out.println("m1end");
	}

	private static void m2() throws FileNotFoundException {
		System.out.println("m2Start");
		m3();
		System.out.println("m2end");
	}

	private static void m3() throws FileNotFoundException {
		/**
		 * 创建一个输入对象，该流指向一个文件
		 * FileNotFoundException是编译时异常，需要进行编译时预处理。
		 * 采用上抛
		 */
		new FileInputStream("D:\\中软学习\\日语学习\\50清.jpg");
		
		System.out.println("以上代码出现异常，该代码会执行吗？？？？？？？？ 不会！！！！！！！");
	}

}
